const https = require('https')
const http = require('http')

const API_BASE_URL = 'http://localhost:5000/api'

// 通用API请求函数
async function apiRequest(endpoint, options = {}) {
  const url = `${API_BASE_URL}${endpoint}`
  
  const defaultOptions = {
    headers: {
      'Content-Type': 'application/json',
      ...options.headers,
    },
    ...options,
  }

  return new Promise((resolve, reject) => {
    const urlObj = new URL(url)
    const isHttps = urlObj.protocol === 'https:'
    const client = isHttps ? https : http
    
    const requestOptions = {
      hostname: urlObj.hostname,
      port: urlObj.port || (isHttps ? 443 : 80),
      path: urlObj.pathname + urlObj.search,
      method: defaultOptions.method || 'GET',
      headers: defaultOptions.headers
    }

    if (defaultOptions.body) {
      requestOptions.headers['Content-Length'] = Buffer.byteLength(defaultOptions.body)
    }

    const req = client.request(requestOptions, (res) => {
      let data = ''
      
      res.on('data', (chunk) => {
        data += chunk
      })
      
      res.on('end', () => {
        try {
          if (res.statusCode >= 200 && res.statusCode < 300) {
            const jsonData = JSON.parse(data)
            resolve(jsonData)
          } else {
            reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`))
          }
        } catch (error) {
          reject(new Error(`JSON解析失败: ${error.message}`))
        }
      })
    })

    req.on('error', (error) => {
      reject(new Error(`请求失败: ${error.message}`))
    })

    if (defaultOptions.body) {
      req.write(defaultOptions.body)
    }
    
    req.end()
  })
}

// 测试用例 - 各种日期表达方式
const testCases = [
  '今天下午3点开会',
  '明天上午9点汇报工作进度',
  '后天晚上7点聚餐',
  '下周一提交报告',
  '这周内完成项目文档',
  '12月25日圣诞节聚会',
  '1月15日年度总结',
  '完成这个任务，没有具体时间'
]

// 测试智能解析日期功能
async function testDateParsing() {
  console.log('🧪 开始测试日期解析功能...\n')
  
  const currentDate = new Date()
  console.log(`📅 当前日期: ${currentDate.getFullYear()}-${(currentDate.getMonth() + 1).toString().padStart(2, '0')}-${currentDate.getDate().toString().padStart(2, '0')}\n`)
  
  for (let i = 0; i < testCases.length; i++) {
    const testCase = testCases[i]
    console.log(`\n${i + 1}. 测试输入: "${testCase}"`)
    
    try {
      const result = await apiRequest('/ai/smart-parse', {
        method: 'POST',
        body: JSON.stringify({ text: testCase })
      })
      
      if (result.success && result.result) {
        const { title, dueDate, priority, category, tags } = result.result
        console.log(`   ✅ 解析成功:`)
        console.log(`      标题: ${title}`)
        console.log(`      日期: ${dueDate || '无'}`)
        console.log(`      优先级: ${priority}`)
        console.log(`      分类: ${category}`)
        console.log(`      标签: [${tags.join(', ')}]`)
        
        // 检查日期年份
        if (dueDate) {
          const parsedYear = new Date(dueDate).getFullYear()
          const currentYear = new Date().getFullYear()
          
          if (parsedYear < currentYear) {
            console.log(`      ⚠️  警告: 日期年份 ${parsedYear} 小于当前年份 ${currentYear}`)
          } else if (parsedYear >= currentYear) {
            console.log(`      ✅ 日期年份正确: ${parsedYear}`)
          }
        }
      } else {
        console.log(`   ❌ 解析失败: ${result.error || '未知错误'}`)
      }
    } catch (error) {
      console.log(`   ❌ 请求失败: ${error.message}`)
    }
  }
  
  console.log('\n🎉 日期解析测试完成!')
}

// 运行测试
if (require.main === module) {
  testDateParsing().catch(error => {
    console.error('❌ 测试执行失败:', error.message)
    process.exit(1)
  })
}

module.exports = {
  testDateParsing
}
